function A() {
	var locate1 = "1oh";
	this.publicName = "public";
	var method1 = function() {
		alert(locate1);
	};
	globalVar = "gobal";
}
A.staticName = "static";
A.prototype = {
	locate2 : "2oh",
	method2 : function() {
		alert(this.locate2);
	},
	method3 : function() {
		alert(locate1);
		method1();
	}
}
var a = new A();
a.method2();
// 执行a.method3()方法无法访问locate1 所有浏览器会提示脚本错误：locate1 is not defind

var b = new A();
/**
 * this定义的变量this.publicName Function的实例化变量，Function被实例化了，可以通过实例化对象访问该变量,
 * 如果函数不是被实例化，而是被调用，则this指向执行该函数的上下文，publicName变量将会在上下文中被创建
 */
console.log(b.publicName);
/**
 * A locate1 function的局部变量, 只有函数运行的时候再函数内部才可以访问该变量
 */
console.log(A.locate1);
/**
 * A.staticName函数的静态变量，函数不需要实例化也可以获取, 实例化对象不可以访问该静态变量
 */
console.log(A.staticName);
console.log(b.staticName);

/**
 * 在函数内不使用var定义的变量为全局变量，如gobalVar 全局变量默认将会创建在window下,也属于window下的一个静态变量
 */
console.log(globalVar);
console.log(window.globalVar);

/**
 * 当你视图编写一个类,你有两种方法来构造你的实例化变量 1、在函数内使用this关键字 2、使用prototype原型属性来定义
 * 使用this的关键字好处在于,实例化变量可以访问函数内的局部变量，不好的是每次实例化的时候都会执行该代码
 * 使用prototype原型属性的好处刚好相反，每次实例化对象的时候都执行该代码，但是无法访问函数内部的变量
 */
var obj = {}; // 空对象
var ref = obj; // 引用

obj.name = "objectA";
print(ref.name); // ref 跟着添加了 name 属性

obj = ["one", "two", "three"]; // obj 指向了另一个对象 ( 数组对象 )
print(ref.name); // ref 还指向原来的对象
print(obj.length); // 3
print(ref.length); // undefined

